<?php 


	require_once 'Model/LoginHandler.php';
	require_once 'common/DBConnection.php';
	require_once 'Model/RegisterModel.php';
	require_once 'Model/User.php';
	class TestAll{
		
		private $loginHandler;
		private $registrationModel;
		private $dbconnection;
		
		/**
		 * Testfunktion som testar inloggningen
		 * @return bool
		 */
		public function __construct($loginHandler, $registrationModel, $dbconnection){
			$this->loginHandler = $loginHandler;
			$this->registrationModel = $registrationModel;
			$this->dbconnection = $dbconnection;
		}
		public function TestRegistration(){
			
			echo '1';
			//Skapa användare med mindre än 6 tecken
			$user = User::CreateUser("hanserikb@gmail.com", "ett", "testl0s3norD"); // för kort användarnamn
			if ($this->registrationModel->AddUser($user) == TRUE) {
				echo 'Fel, användarnamnet ska inte få vara kortare än 6 tecken';
				return FALSE;
			}
			echo '2';
			//Skapa användare med tomt användarnamn
			$user = User::CreateUser("hanserikb@gmail.com", "", "testl0s3norD"); // Tomt användarnamn
			if ($this->registrationModel->AddUser($user) == TRUE){
				echo 'Fel, användarnamnet får inte vara tomt';
				return FALSE;
			}
			
			echo '3';
			// Skapa användare med ett användarnamn som redan finns
			$user = User::CreateUser("hanserikb@gmail.com", "finnsredan", "finnsredan"); // Användarnamn finns redan
			if ($this->registrationModel->AddUser($user) == TRUE){
				echo 'Fel, användarnamnet får inte vara tomt';
				return FALSE;
			}
			
			// Skapa en användare och ta bort den
			$user = User::CreateUser("hanserikb@gmail.com", "anvendarnamn", "testl0s3norD"); // Korrekt användare
			if ($this->registrationModel->AddUser($user) == FALSE){
				echo 'Fel. En korrekt användare nekades.';
				return FALSE;
			}
			echo '5';
			if($this->registrationModel->RemoveUser($user) == FALSE){
				echo 'Fel. Gick inte att ta bort den giltliga användaren';
				return FALSE;
			}
			
			return TRUE;
			
			
		}
		public function TestLogin()
		{
			$this->loginHandler->DoLogout();
						
			
			// Kontrollerar om användaren verkligen är utloggad
			if ($this->loginHandler->IsLoggedIn() !== FALSE) {
				echo "Fel. Användaren skall vara utloggad <br/>";
				return FALSE;				
			}
			
			
			echo '1';
			// Testar inloggning med fel användarnamn samt lösenord
			$user = User::CreateUser("hanserikb@gmail.com", "testFEL", "test"); // icke Korrekt användare		
			if($this->loginHandler->DoLogin($user) !== FALSE){
				
				echo "Fel. Inloggningen skall misslyckas <br/>";
				return FALSE;
			}
			
			echo '2';
			// Testar inloggning med rätt användarnamn men fel lösenord
			$user = User::CreateUser("hanserikb@gmail.com", "test", "testFEL"); // icke-Korrekt användare
			if($this->loginHandler->DoLogin($user) !== FALSE){
				echo "Fel. Inloggningen skall misslyckas <br/>";
				return FALSE;
			}
			
			echo '3';
			// Testar inloggning med rätt användarnamn samt lösenord
			$user = User::CreateUser("hanserikb@gmail.com", "test", "test"); // Korrekt användare
			if($this->loginHandler->DoLogin($user) !== TRUE){
				echo "Fel. Inloggningen skall lyckas <br/>";
				return FALSE;
			}
			
			// Kontrollerar om användaren nu är inloggad
			if ($this->loginHandler->IsLoggedIn() !== TRUE) {
				echo "Fel. Användaren skall vara inloggad <br/>";
				return FALSE;
			} 
			
			// Loggar ut		
			$this->loginHandler->DoLogout();
			
			// Kontrollerar om användaren nu är inloggad
			if ($this->loginHandler->IsLoggedIn() !== FALSE) {
				echo "Fel. Användaren skall vara utloggad <br/>";
				return FALSE;
			}
			
			return TRUE;	
		}
	}
		
	$dbconnection = new DBConnection();
	$dbconnection->Connect();
	$loginHandler = new LoginHandler($dbconnection);
	
	$registrationModel = new RegisterModel($dbconnection);
	
	$testAll = new TestAll($loginHandler, $registrationModel, $dbconnection);
	
	if ($testAll->TestLogin() == TRUE){
		echo "Logintest Testet lyckades";
	}else{
		echo "Logintest misslyckades";
	}
	
	if ($testAll->TestRegistration() == TRUE){
		echo "Registrerings-testet lyckades";
	}else{
		echo "Registrerings-testet misslyckades";
	}
		$dbconnection->Close();
	
	
